
import pygame                   # 导入pygame库
from pygame.locals import *     # 导入pygame库中的一些常量
import sys



size = width, height = 454, 340          # 设置游戏窗口大小，宽454，高340

pygame.init()                                              # 初始化pygame
screen = pygame.display.set_mode(size)                     # 初始化游戏窗口
pygame.display.set_caption("my first pygame program")      # 设置游戏窗口标题
background = pygame.image.load('./images/background.jpg')  # 设置游戏窗口背景图片
plane_img = pygame.image.load('./images/airplane.png')     # 导入飞机图片

'''''''''''''''''
实现飞机动态效果：先显示整个飞机（hero1_rect），然后再切换显示飞机上半部分（hero2_rect）
top+bottom应该小于等于飞机图片高度，left+right应该小于等于飞机图片宽度
'''''''''''''''''
hero1_rect = pygame.Rect(0, 0, 80, 113)                    # left,right,top,bottom
hero2_rect = pygame.Rect(0, 0, 80, 90)
hero1 = plane_img.subsurface(hero1_rect)
hero2 = plane_img.subsurface(hero2_rect)
hero_pos = [200,200]                                       # 字典类型：左上角往右210，往下250

ticks = 0                                                  # 为了飞机动态效果设置一个变量
offset = {pygame.K_LEFT:0, pygame.K_RIGHT:0, pygame.K_UP:0, pygame.K_DOWN:0}   #定位具体位置

'''''''''
处理游戏退出,从消息队列中循环取
'''''''''
while True:
    # 消息队列，一些动作
    screen.blit(background, (0, 0))  # 绘制背景图片
    # 如果要喷射的效果速度变慢，可以增加值数量
    if ticks % 100 < 50:
        screen.blit(hero1, hero_pos)
    else:
        screen.blit(hero2, hero_pos)
    ticks += 1


    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            pygame.quit()
            sys.exit()

        if event.type == pygame.KEYDOWN:    #鼠标按键
            if event.key in offset:
                offset[event.key] = 3
        if event.type == pygame.KEYUP:      #鼠标松开
            if event.key in offset:
                offset[event.key] = 0

        '''''''''''''''
        这种情况下，每次只能移动一次位置
        offset_x = offset[pygame.K_RIGHT] - offset[pygame.K_LEFT]
        offset_y = offset[pygame.K_DOWN] - offset[pygame.K_UP]
        hero_pos = [hero_pos[0] + offset_x, hero_pos[1] + offset_y]
        放到这个循环外面就可以鼠标长按移动
        '''''''''''''''''''''
    hero_x = hero_pos[0] + offset[pygame.K_RIGHT] - offset[pygame.K_LEFT]      #飞机左右移动坐标
    hero_y = hero_pos[1] + offset[pygame.K_DOWN] - offset[pygame.K_UP]         #飞机上下移动坐标
    #为了防止飞机飞出到窗口外面，可以对坐标进行判断
    if hero_x <0:
        hero_pos[0] = 0
    elif hero_x > width - hero1_rect.width:
        hero_pos[0] = width - hero1_rect.width
    else:
        hero_pos[0] = hero_x

    if hero_y <0:
        hero_pos[1] = 0
    elif hero_y > height - hero1_rect.height:
        hero_pos[1] = height - hero1_rect.height
    else:
        hero_pos[1] = hero_y

    pygame.display.update()  # 更新屏幕(最后一个步骤要更新屏幕)